package cn.clj1.cell;

/**
 * clj cell 的 type
 * */
public enum CljCellType {

    // (XXX) 需要计算的序列 例如： (add a b)
    Clj_list,
    // '(XXX) 不需要计算的序列 例如： '(add a b)
    list,
    // set
    set,
    // hash_table
    hash_table,
    // ` 阻止() 表达式求值 例如：`(if ~test (list ~@body))
    quote_list,
    // ' 阻止表达式求值 例如：'if
    quote,
    // ~ 求值表达式 例如： ~test
    unquote,
    // ~@ 对序列求值，并展开
    unquote_list,
    // &
    and_clj,
    // defmacro 宏
    defmacro,
    // defn 方法
    defn,
    // def 定义
    def,
    // fn 匿名方法
    fn,
    // let
    let,
    // cond
    cond,
    // if
    if_clj,
    // first
    first,
    // last
    last,
    // rest
    rest,
    // do
    do_clj,
    // loop
    loop,
    // recur
    recur,
    // conj
    conj,
    // apply
    apply,
    // map
    map,
    // cons
    cons,
    // reduce
    reduce,
    // eval
    eval,

    // 中括号
    bracket,
    // 大括号
    braces,

    // 中括号
    lbracket,
    rbracket,
    // 大括号
    lbraces,
    rbraces,

    // 小括号
    lparen,
    rparen,

    // 标识符
    symbol,

    // : 标识符
    key_symbol,

    // 字符串
    string_clj,
    // 数字
    number_clj,
    // 布尔类型
    boolean_clj,
    // 日期类型
    date_clj,
    // int
    int_clj,
    // long
    long_clj,
    // char
    char_clj,
    // short
    short_clj,
    // byte
    byte_clj,
    // double
    double_clj,
    // float
    float_clj,

    // 基础类型的函数
    // (string "吴大富")
    string_func,
    // 数字
    number_func,
    // 布尔类型
    boolean_func,
    // 日期类型
    date_func,
    // int
    int_func,
    // long
    long_func,
    // char
    char_func,
    // short
    short_func,
    // byte
    byte_func,
    // double
    double_func,
    // float
    float_func,

    /**
     * 数学符号
     * */
    // + 加法
    addition,
    // - 减法
    subtraction,
    // * 乘法
    multiplication,
    // / 除法
    division,

    /**
     * 逻辑判断
     * */
    // not
    not,
    // nil
    nil,
    // is nil
    is_nil,
    // 和
    and,
    // 或
    or,
    // 等于
    equals_clj,
    // 大于
    greater_than_clj,
    // 小于
    less_than_clj,
    // 大于等于
    greater_equals_clj,
    // 小于等于
    less_equals_clj,
    // else
    else_clj,
    // println
    println,

    /**
     * 特殊符号
     * */
    // #
    sharp,
    // 百分号
    percent,
    // 匿名函数
    anonymous

}
